QEmu simule deux contrôleurs IDE, et peut donc utiliser jusqu'à quatre disques durs virtuels (trois si le lecteur de CD est utilisé).
qemu-img est l'outil dédié à la création d'images de disques. Il permet de créer le fichier qui servira de disque dur à la machine virtuelle.
Voici toutes les options possibles pour qemu-img.
C:\QEMU>qemu-img
qemu-img version
0.8.2, Copyright (c) 2004-2006 Fabrice Bellard
usage: qemu-img
command [command options]
QEMU disk image utility
Command
syntax:
create [-e] [-b base_image] [-f fmt] filename
[size]
commit [-f fmt] filename
convert
[-c] [-e] [-f fmt] filename [-O output_fmt] output_filename
info
[-f fmt] filename
Command parameters:
'filename'
is a disk image filename
'base_image' is the read-only
disk image which is used as base for a copy on
write
image; the copy on write image only stores the modified data
'fmt'
is the disk image format. It is guessed automatically in most
cases
'size' is the disk image size in kilobytes.
Optional suffixes 'M' (megabyte)
and 'G'
(gigabyte) are supported
'output_filename' is the
destination disk image filename
'output_fmt' is the
destination format
'-c' indicates that target image
must be compressed (qcow format only)
'-e' indicates
that the target image must be encrypted (qcow format only)
Supported
format: qcow2 vvfat vpc bochs dmg cloop vmdk qcow host_device raw
qemu-img comprend quatre commandes.
create : permet de créer un fichier image.
Créer une image de disquette vierge :
C:\QEMU>qemu-img create -f qcow2 IMAGES\Floppy.img 1440
commit : les informations du fichier image filename sont écrites dans l'image de base.
ATTENTION : si une image de base est utilisée pour plusieurs autres images, n'appliquez cette commande qu'à une seule image, sous peine de rendre l'image de base inutilisable. Il est alors fort probable que les autres images dépendant de cette image de base devront être réinitialisées.
convert : permet de créer une nouvelle image à partir d'une image existante, en changeant éventuellement le format.
info : affiche des informations sur l'image spécifiée.
Ce format permet de créer une image de 2 Go maximum (jusqu'à la version 0.8.1 de qemu-img). Le fichier d'une image raw consomme immédiatement de la place sur le disque dur de l'hôte. Autrement dit, une image d'1 Go, par exemple, mobilisera 1 Go sur le disque dur, même si le système cible n'en utilise que 200 Mo...
Ce format a l'avantage d'être compatible avec d'autres émulateurs.
Exemple :
C:\QEMU>qemu-img create -f raw IMAGES\DisqueRAW.img 100M
crée une image de type raw de 100 Mo
Remarque : la version 0.8.2 fait disparaître la limite des 2 Go.
Qcow2, qui a fait son apparition avec la version 0.8.3, est de loin le format le plus intéressant. C'est le format que nous avons déjà rencontré lors du démarrage rapide. Il a l'avantage de n'utiliser que l'espace réellement nécessaire. Une image de 10 Go, par exemple, ne pèse que quelques Ko lors de sa création. Cette image va grandir au fur et à mesure que le SE cible écrit ses fichiers. En fin d'installation, une image Windows 2000, par exemple, fait environ 700 à 800 Mo. Mais les 9 Go restants pourront être utilisés par la suite.
Ce format permet également de comprimer et de crypter une image. Le support des instantanés multiples est pris en charge à partir de ce format (paragraphe 5.3.7, page 32).
Exemple :
C:\QEMU>qemu-img create -f qcow2 IMAGES\DisqueCOW.img 10G
crée une image de type qcow2 de 10 Go.
Remarque : le format précédent, qcow, est conservé pour des raisons de compatibilité.
QEmu sait créer et utiliser d'autres formats d'images. Ceux-ci sont utiles surtout lorsqu'on travaille simultanément avec d'autres émulateurs.
vpc : image pour VirtualPC (Microsoft http://www.microsoft.com/france/windows/xp/virtualpc/default.mspx)
bochs : l'émulateur de PC Bochs (http://bochs.sourceforge.net)
dmg : image disque sous Mac OSX
cloop : image Loop compressée (Linux)
vmdk : image pour le virtualiseur VMWare (http://www.vmware.com)
Nous avons déjà vu que le format cow présente des avantages d'un point de vue occupation de l'espace disque. Voyons maintenant une autre caractéristique très intéressante de ce format.
Avec l'option -b, qemu-img permet de créer une image basée sur une autre image existante.
Imaginons que nous venons d'installer Windows 2000 dans une image nommée DD_W2K.IMG. Maintenant que cette image est paramétrée comme il faut, tous les éléments utiles ont été installés et configurés dans le SE cible, nous aimerions utiliser cette images pour toute une série de tests. Et après chaque test, nous voulons repartir d'une image propre. Eh bien, le format qcow permet de faire ce genre de manipulation très facilement, et réinitialiser l'image ne prend pas plus de temps qu'il n'en faut pour taper une ligne de commande qemu-img.
COW signifie Copy On Write, c'est à dire Copie lors de l'écriture. Autrement dit, QEmu peut lire dans une image, tout en écrivant dans une autre. Mais ces deux images sont vues comme ne faisant qu'une seule. C'est ici qu'intervient l'image de base, option -b de qemu-img.
Pour la démonstration, nous allons renommer notre image Windows 2000 toute neuve en DD_W2K_BASE.IMG.
Ensuite, créons une nouvelle image avec la commande create, comme suit :
C:\QEMU>qemu-img create -b
IMAGES\DD_W2K_BASE.IMG -f qcow2 IMAGES\DD_W2K.IMG
Formating
'images\dd_w2k.img', fmt=qcow, backing_file=images\dd_w2k_base.img,
size=nnnnnnn kB
Nous avons maintenant une nouvelle image (que nous appellerons image différentielle, puisqu'elle ne contient que les différences par rapport à l'image de base), de quelques Ko en taille réelle, mais dont la taille virtuelle est identique à celle de l'image de base.
Lorsque nous lancerons QEmu :
C:\QEMU>qemu -hda IMAGES\dd_w2k.img -m 192 -localtime -L BIOS
celui-ci ira lire dans l'image IMAGES\dd_w2k_base.img, MAIS, toutes les écritures seront faites dans IMAGES\dd_w2k.img. L'image de base reste inchangée. Un secteur non modifié est lu à partir de l'image de base, un secteur modifié (récrit) est lu à partir de l'image différentielle.
Ainsi, pour retrouver notre Windows de départ, après un test, il suffit de recréer l'image différentielle dd_w2k.img, par la même ligne de commande que précédemment.
De plus, plusieurs images différentielles peuvent utiliser la même image de base, puisque celle-ci est en lecture seule.
Remarques :
L'image de base peut-être au format raw.
Il est possible d'intégrer tous les changements d'une image différentielle dans l'image de base avec la commande :
C:\QEMU>qemu-img commit -f qcow2 IMAGES\dd_w2k.img
Remarque : La commande commit du moniteur ne s'applique que si QEmu a été démarré avec l'option -snapshot. Dans ce cas, les secteurs de l'image temporaire automatique sont transférés vers l'image de base.
ATTENTION : si une même image de base est utilisée pour plusieurs images différentielles, n'appliquez cette commande qu'à une seule image, sous peine de rendre l'image de base inutilisable. Il est alors fort probable que les autres images différentielles dépendant de cette image de base devront être réinitialisées.
La commande info permet d'afficher des renseignements sur l'image disque.
C:\QEMU>qemu-img info
IMAGES\dd_w2k.img
image: dd_w2k.img
file format: qcow2
virtual
size: 5.0G (5368709120 bytes)
disk size: 482M
cluster_size:
4096
Snapshot list:
ID TAG VM SIZE
DATE VM CLOCK
1 SAVE1 45M
aaaa-mm-jj hh:mm:ss hh:mm:ss.mmm
2 SAVE2
45M aaaa-mm-jj hh:mm:ss hh:mm:ss.mmm
La commande convert permet de passer d'un format d'image à un autre. Lors de la conversion, seuls les secteurs utilisés sont récrits, permettant par la même occasion de réduire la taille du fichier image. Il est bien sûr possible d'avoir des formats source et destination identiques.
Exemple :
C:\QEMU>qemu-img convert -f qcow2 IMAGES\dd_w2k.img -O qcow2 IMAGES\dd_w2k_new.img
Cette commande copie une image disque en en retirant les secteurs inutilisés.
Remarque : à l'usage, il semble que la syntaxe exacte de la commande convert est :
qemu-img convert -O <format> <ancienne image> <nouvelle image>